package com.zenithmind.gateway.exception;

import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/**
 * 异常处理策略接口
 * 遵循策略模式：定义异常处理的算法族
 * 遵循依赖倒置原则：高层模块依赖抽象而非具体实现
 */
public interface ExceptionHandlingStrategy {
    
    /**
     * 判断是否可以处理该异常
     * @param ex 异常对象
     * @return 如果可以处理返回true，否则返回false
     */
    boolean canHandle(Throwable ex);
    
    /**
     * 处理异常
     * @param exchange 服务器交换对象
     * @param ex 异常对象
     * @return 处理结果
     */
    Mono<Void> handle(ServerWebExchange exchange, Throwable ex);
    
    /**
     * 获取策略优先级，数字越小优先级越高
     * @return 优先级
     */
    default int getOrder() {
        return 0;
    }
}
